#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> V;
const int N=105;
int n,m,each,a[N];
ull H(V tmp) {
  ull res=0;
  for (int &x : tmp) res=res*23333+x+1;
  return res;
}
const int mod=(1e7)+9;
const int maxn=(5e5)+10;
struct map {
  V Real[maxn];
  ull H[maxn]; ll w[maxn];
  int head[mod];
  int nxt[maxn],tot;
  void add(V &tmp,ll y) {
    ull x=::H(tmp);
    for (int i=head[x%mod];i;i=nxt[i]) if (H[i]==x) { w[i]=min(w[i],y); return; }
    tot++; nxt[tot]=head[x%mod]; head[x%mod]=tot; H[tot]=x; w[tot]=y; Real[tot]=tmp;
  }
  void clear() {
    for (int i=1;i<=tot;i++) head[H[i]%mod]=0;
    tot=0;
  }
} dp[2];
int main(){
	freopen("diyiti.in","r",stdin);
	freopen("diyiti.out","w",stdout); 
  scanf("%d%d",&n,&m);
  each=n/m;
  V tmp;
  tmp.resize(m+1);
  for(int i=0;i<=m;i++)tmp[i]=0;
  int op=0;
  dp[0].add(tmp,0);
  for(int i=0;i<n;i++)scanf("%d",&a[i]);
  sort(a,a+n);
  for(int i=0;i<n;i++){
    int x=a[i];
    dp[op^1].clear();
    for (int jj=1;jj<=dp[op].tot;jj++) {
      V A=dp[op].Real[jj];
      ll B=dp[op].w[jj];
      for(int j=1;j<=m;j++)if(A[j]<each){
        if(A[j]>A[0]&&i&&x==a[i-1])continue;
        V C=A;
        C[j]++;
        ll D=B;
        if(C[j]==1)D-=x;
        if(C[j]==each)D+=x;
        C[0]=0;
        sort(C.begin(),C.end());
        C[0]=A[j];
        dp[op^1].add(C,D);
      }
    }
    op^=1;
  }
  ll inf=~0ULL>>1;
  ll ans=inf;
  for (int jj=1;jj<=dp[op].tot;jj++) ans=min(ans,dp[op].w[jj]);
  // for(map<V,ll>::iterator it=pre.begin();it!=pre.end();it++)ans=min(ans,it->second);
  if(ans==inf)ans=-1;
  printf("%lld\n",ans);
  // cerr<<clock()<<endl;
}
